package com.ajx.blog.service.api;

import java.util.List;
import java.util.Map;

import com.ajx.blog.entity.Menu;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;

public interface MenuService extends IService<Menu> {

    /**
     * @param {Menu} menu 菜单对象
     * @return {boolean} 是否添加成功 true/false
     * 
     * @description: 添加一个菜单
     */
    boolean insertOneMenu(Menu menu);

    /**
     * @param {Menu} menu 菜单对象
     * @return {boolean} 是否修改成功 true/false
     * 
     * @description: 修改一个菜单
     */
    boolean updateOneMenu(Menu menu);

    /**
     * @param {Integer} mid 菜单id
     * @return {Menu} 菜单对象
     * 
     * @description: 通过菜单id查询一个菜单
     */
    Menu selectOneMenu(Integer mid);

    /**
     * @param {Map<String,Object>} map
     *                             搜索条件封装的map对象,如果parentId为空则所有一级菜单栏,不为空则搜索对应的二级菜单栏。如果角色列表不为空则搜索对应角色的菜单列表,为空则不安角色搜索
     * @return {List<Menu>} 角色对应的菜单栏map集合
     * 
     * @description: 根据角色查询菜单栏
     */
    List<Menu> selectMenuByMap(Map<String, Object> map);

    /**
     * @param {Map<String,Object>} map
     *                             搜索条件封装的map对象,如果parentId为空则所有一级菜单栏,不为空则搜索对应的二级菜单栏
     * @return {List<Menu>} 菜单栏list集合
     * 
     * @description: 查询所有菜单
     */
    List<Menu> selectAllMenuByMap(Map<String, Object> map);

    /**
     * @param {Integer} page 当前页码数
     * @return {PageInfo<Menu>} 封装的分页信息对象
     * 
     * @description: 查询所有菜单
     */
    PageInfo<Menu> selectAllMenuByLimit(Integer page);

    /**
     * @param {Integer} rid 角色id
     * @return {Map<Integer, Object>} 菜单栏map集合
     * 
     * @description: 根据角色id查询菜单栏
     */
    Map<Integer, Object> selectAdminMenu(Integer rid);

}
